package com.sparkseries.service;

import com.sparkseries.domain.vo.SysUserVO;
import com.sparkseries.dto.SysUserAuthenticationDTO;
import com.sparkseries.dto.SysUserDTO;
import com.sparkseries.common.util.domain.Result;

import java.util.List;

/**
 * 用户管理
 */
public interface SysUserService {
    /**
     * 注册用户
     * @param userDTO 用户传输类
     * @return 默认响应类
     */
    Result<?> register(SysUserDTO userDTO);

    /**
     * 实名认证
     * @param authenticationDTO 实名信息传输类
     * @return 默认响应类
     */
    Result<?> userAuthenticate(SysUserAuthenticationDTO authenticationDTO);

    /**
     * 注销用户
     * @param userId 用户ID
     * @return 默认响应类
     */
    Result<?> deleteUser(Long userId);

    /**
     * 修改用户信息
     * @param userDTO 用户传输类
     * @return 默认响应类
     */
    Result<?> updateUser(SysUserDTO userDTO);

    /**
     * 修改用户密码
     * @param userId 用户ID
     * @param password 用户密码
     * @return 默认响应类
     */
    Result<?> updateUserPassword(Long userId, String password);

    /**
     * 修改用户状态
     * @param userId 用户ID
     * @param status 是否启用（0-禁用，1-启用）
     * @return 默认响应类
     */
    Result<?> updateUserStatus(Long userId, Integer status);

    /**
     * 获取用户列表
     * @param userDTO 用户传输类
     * @return 用户响应类集合
     */
    Result<List<SysUserVO>> listUser(SysUserDTO userDTO);

    /**
     * 获取用户信息
     * @param userId 用户ID
     * @return 用户响应类
     */
    Result<SysUserVO> getUserInfo(Long userId);

    /**
     * TODO 消息与通知
     * @param userId 用户ID
     * @param type 信息或通知类型
     * @param message 内容
     * @return 默认响应类
     */
    Result<?> notifyUser(Long userId, String type, String message);

    /**
     * TODO 密码强度检测优化
     * @param password 用户密码
     * @return 默认响应类
     */
    Result<?> detectPasswordSecurity(String password);

    /**
     * 获取所有通知类型
     * @return 所有通知类型
     */
    Result<?> getAllNotifType();
}
